- Published on
COSMOS 生产环境部署流程
- Authors
- Name
- JiGu
- @crypto20x
配置文件
节点二进制文件都在 ~/.xxxd/config
里面。
app.toml
控制Appliaction层的配置,grpc端口等,应用层开发主要改这个。
config.toml
cometBFT层配置,只开发module应用层,基本不用动这个。里面包含p2p端口配置,ABCIQuery端口配置。
直接与共识层打交道,就需要看这个配置文件,例如直接向cometBFT提交交易,查询等等。
生产部署流程
simd
是测试链的可执行程序denom
代币的最小面额,来源于denomination这个单词validator
PoS共识下的矿工,负责签名打包区块
以Atom为例,最小面额单位是uatom,代表百万分之一的atom,如果是natom则代表十亿分之一。denom定义的是不可拆分的最小单位,也就是说,转账最小的单位是1 uatom。
成为validator 需要 10,000,000 个denom单位的代币,这个数量是硬编码在程序里的。所以确保最小面额设置得合适,能满足这个要求。
1. build编译
官网: https://tutorials.cosmos.network/tutorials/9-path-to-prod/2-software.html
官方介绍了多种编译方式,选择常用的go build即可。需要考虑二进制程序所运行的平台,编译可执行文件到目标cpu架构与操作系统平台。 例如:
GOOS=windows GOARCH=arm go build -o node
编译到cpu为arm,的windows操作系统平台。
2. 配置验证人节点
官网:https://tutorials.cosmos.network/tutorials/9-path-to-prod/3-keys.html
验证人节点负责对块签名并出块,需要能够访问私钥。
如果私钥可以被验证人节点直接访问,当验证人节点被攻击后,私钥可能泄露,并一直对恶意块进行签名。
如果验证人是通过签名服务对块进行签名,那么只要停掉签名服务,即可暂停攻击。
密钥生成
Consensus Key 共识密钥
在运行 simd init
时会生成一个测试密钥在~/.simapp/config/priva_validator_key.json
,如果在生产环境,这个密钥则不够安全。如果非要使用这个密钥,则将它导入到KMS(密钥管理服务)后,再删除这个文件。
App Key 应用程序密钥
通过simd keys
进行设置
3. 创世配置
simd init test-1 --chain-id demo --default-denom mini
创建一条id为demo,代币为mini的测试链 。
test-1 为链的名字,后面最好跟一个数字,应分叉后,可以递增该数字进行区分。
当执行simd start
启动一条链时,需要配置:
Token Name(原生代币名字) 可以在
init
的时候 通过--default-denom
指定,也可以编辑创世文件,默认为stake
Genesis Accounts (创世账户) 预分配账户,一般来说是在主网上线前购买了token的用户。通过
add-genesis-account
命令添加。有多个账户添加需要做collect
(聚合)。
地址会有一个前缀,在app/app_config.go
中定义, 默认为cosmos
。
- Validator(验证者)
创世配置在~/.simd/config/genesis.json
,可以参考CosmosHub的说明https://hub.cosmos.network/main/resources/genesis.html
链在启动前,一般有多个验证者,每个验证者需要给他们分配account_number
账户编号,还有初始代币数量。通过邮件,或者别的链下方式通知。
例如验证者Alice在自己的电脑上运行:
./myprojectd gentx cavedweller1nw793j9xvdzl2uc9ly8fas5tcfwfetercpdfqq \
3000000000stone \
--account-number 0 --sequence 0 \
--chain-id stone-age \
--pubkey '{"@type":"/cosmos.crypto.ed25519.PubKey","key":"byefX/uKpgTsyrcAZKrmYYoFiXG0tmTOOaJFziO3D+E="}' \
--gas 1000000 \
--gas-prices 0.1nstone \
--keyring-backend os
生成的配置在~/.myprojectd/config/gentx/
目录中。
收集其他所有验证者生成的gentx,并将它们放入~/.myprojectd/config/gentx/
中。如果有的验证者没有及时发送gentx过来,只要收集够足够的validator即可开始集合交易,启动网络。
剩下的验证者可以自己将交易发送到已启动的网络,成为验证者。
集合交易:
./myprojectd collect-gentxs
4. 启动
创世块启动时,Parties(参与者们)需要访问同一份genesis.json的创世文件,创世文件包含初始的代币分配,validator等信息,与各参与方的利益息息相关。
需要这些参与方都认可这份创世文件,并启动节点,那么这条链才算成功启动,并生成创世块。
只有创世块是通过社交达成共识,其他块都是通过PoS达成共识。社交共识即链下共识,分发genesis.json创世文件的过程,相当于分发合同,各参与方确认无误后,再运行节点,启动网络。
验证者与节点运营者,需要将创世文件放入自己电脑目录~/.myprojectd/config/genesis.json
,然后启动节点程序。
发起交易
直接使用gosdk发起
https://github.com/leonz789/cosmossdk-tx-demo/tree/main https://github.com/Reecepbcups/cosmos-submit-tx-client
使用comJS发起
CLI
CURL jsonRPC